// 认证相关 API
import api from './request'

/**
 * 获取验证码
 */
export const getCaptcha = async () => {
  try {
    console.log('发起验证码请求到后端...')
    const response = await api.get('/auth/captcha')
    console.log('后端验证码API原始响应:', response)
    return response
  } catch (error) {
    console.error('验证码API调用失败:', error)
    console.error('错误状态码:', error.response?.status)
    console.error('错误响应:', error.response?.data)
    
    // 直接抛出错误，不使用模拟数据
    throw error
  }
}

/**
 * 生成模拟验证码数据
 */
const generateMockCaptcha = () => {
  const mockCode = Math.random().toString(36).substring(2, 6).toUpperCase()
  
  // 创建canvas生成验证码图片
  const canvas = document.createElement('canvas')
  canvas.width = 120
  canvas.height = 40
  const ctx = canvas.getContext('2d')
  
  // 绘制背景
  const gradient = ctx.createLinearGradient(0, 0, 120, 40)
  gradient.addColorStop(0, '#f0f8ff')
  gradient.addColorStop(1, '#e6f3ff')
  ctx.fillStyle = gradient
  ctx.fillRect(0, 0, 120, 40)
  
  // 绘制验证码文字
  ctx.fillStyle = '#409eff'
  ctx.font = 'bold 18px Arial'
  ctx.textAlign = 'center'
  ctx.textBaseline = 'middle'
  
  // 添加文字倾斜和间距
  const chars = mockCode.split('')
  chars.forEach((char, index) => {
    ctx.save()
    const x = 20 + index * 20
    const y = 20
    const angle = (Math.random() - 0.5) * 0.4
    ctx.translate(x, y)
    ctx.rotate(angle)
    ctx.fillText(char, 0, 0)
    ctx.restore()
  })
  
  // 添加干扰线
  ctx.strokeStyle = '#cccccc'
  ctx.lineWidth = 1
  for (let i = 0; i < 3; i++) {
    ctx.beginPath()
    ctx.moveTo(Math.random() * 120, Math.random() * 40)
    ctx.lineTo(Math.random() * 120, Math.random() * 40)
    ctx.stroke()
  }
  
  // 添加干扰点
  ctx.fillStyle = '#dddddd'
  for (let i = 0; i < 20; i++) {
    ctx.beginPath()
    ctx.arc(Math.random() * 120, Math.random() * 40, 1, 0, 2 * Math.PI)
    ctx.fill()
  }
  
  const captchaImage = canvas.toDataURL('image/png')
  const captchaKey = 'mock_captcha_' + Date.now()
  
  console.log('生成模拟验证码:', mockCode)
  
  return {
    flag: true,
    data: {
      captchaImage,
      captchaKey,
      expiresIn: 300,
      mockCode // 开发模式下返回验证码答案
    },
    message: '模拟验证码生成成功'
  }
}

/**
 * 用户登录
 * @param {Object} loginData 登录数据
 * @param {string} loginData.username 用户名
 * @param {string} loginData.password 密码
 * @param {string} loginData.captcha 验证码
 * @param {string} loginData.captchaKey 验证码key
 */
export const login = async (loginData) => {
  try {
    console.log('调用登录API...')
    const response = await api.post('/auth/login', loginData)
    console.log('登录API响应:', response)
    return response
  } catch (error) {
    console.error('登录API调用失败:', error)
    
    // 如果是网络错误，不抛出异常，让上层处理模拟登录
    if (error.message?.includes('网络错误') || error.message?.includes('ERR_CONNECTION_REFUSED')) {
      throw new Error('网络错误，请检查后端服务是否启动')
    }
    
    // 其他错误直接抛出
    throw error
  }
}

/**
 * 用户登出
 */
export const logout = () => {
  return api.post('/auth/logout')
}

/**
 * 刷新令牌
 * @param {string} refreshToken 刷新令牌
 */
export const refreshToken = (refreshToken) => {
  return api.post('/auth/refresh', { refreshToken })
}

/**
 * 获取当前用户信息
 */
export const getCurrentUserInfo = () => {
  return api.get('/sys/user/info')
}
